/*HOLA QUE TAL
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Util;

import Persistencia.PersistenciaUsuario;
import java.io.IOException;
import java.lang.String;
import java.text.ParseException;
import java.util.*;

/**
 *
 * @author
 * Prueba de caja
 */
public class PruebaRoxana {

    public static void menuRoxana() throws ParseException, IOException {
        float saldo = 0f;
        Caja nuevaCaja = null;
        int n;

        /*
         * Prueba de caja y de promociones
         */
        do {
            System.out.println("MENU DE OPERACIONES");
            System.out.println("0. Salir");            
            System.out.println("1. Operacion de Promociones");
            System.out.println("");
            System.out.print("Introduzca opcion: ");
            n = Teclado.leeEntero();
            switch (n) {
                case 0:
                    break;              
                case 1:
                    System.out.println("Operaciones de Usuarios");
                    opDeUsuario();
                    break;
                default:
                    System.out.println("Opcion incorrecta");
            }
        } while (n != 2);
    }

    public static void opDeUsuario() throws ParseException, IOException {
        // variable para recuperar la opcion del menu
        int opc;
        //String codigoPromo = null;

        do {
            System.out.println("");
            System.out.println("===========================================================");
            System.out.println("|         OPERACIONES CON PROMOCION                       |");
            System.out.println("===========================================================");
            System.out.println("|-------  [0]  Salir                                ------|");
            System.out.println("|-------  [1]  Dar de alta un usuario               ------|");
            System.out.println("|-------  [2]  Dar de baja un usuario               ------|");
            System.out.println("|-------  [3]  Registrar un usuario                 ------|");
            System.out.println("|-------  [4]  Comprobar la existencia de un usuario------|");
            System.out.println("|-------  [5]  Modificar datos de un usuario        ------|");
            System.out.println("|-------  [6]  Cargar datos de un usuario           ------|");
            System.out.println("===========================================================");
            System.out.print("     Introduzca opcion: ");

            try {
                opc = Teclado.leeEntero();
            } catch (Exception ex) {
                opc = 9999;
            }

            switch (opc) {
                case 0:
                    break;
                case 1:
                    darAltaUsuario();
                    break;
                case 2:
                    darBajaUsuario();
                    break;
                case 3:
                    registrarUsuario();
                    break;
                case 4:
                    existeUsuario();
                    break;
               case 5:
                    modificarUsuario();
                    break;
               
                case 6:
                    cargaUsuario();
                    break;
                default:
                    System.out.println("Introduzca opcion correcta...");
            }
        } while (opc != 0);
    }

    public static void opAltapromocion() throws ParseException, IOException {
        // vamos a pedir los datos por teclado

        // variables para recuperar los datos de la promoci�n
        String codigoPromocion;
        String nombreProm;
        Date fechaInicio = null;
        Date fechaFin = null;
        float descuento = 0;
        List<Producto> lproductos = new ArrayList();

        //variables para recuperar los datos del producto
        String codigo, primeraLetra;
        String nombreProd;

        Promocion promocion = null;
        Producto producto = null;

        System.out.println("");
        System.out.println("================================================");
        System.out.println("|             CREACION DE PROMOCION             |");
        System.out.println("================================================");
        //creo una colecci�n de productos para ir guardando los productos anteriores
        System.out.print("    Introduce el nombre de la promocion: ");
        nombreProm = Teclado.leeTexto();///COMProbar fechas
        System.out.print("    Introduce la fecha de inicio de la promocion: ");
        fechaInicio = Teclado.LeeFecha();
        System.out.print("    Introduce la fecha de fin de la promocion: ");
        fechaFin = Teclado.LeeFecha();
        while (descuento <= 0 || descuento > 100) {
            System.out.print("    Introduce el descuento a realizar[%]: ");
            descuento = Teclado.leedatoFloat();
        }


        do {
            System.out.print("    Introduce el codigo del producto(0 para salir): ");
            codigo = Teclado.leeTexto();
            producto = Producto.dameProducto(codigo);
            if (producto != null) {
                lproductos.add(producto);
            } else {
                System.out.println("El codigo " + codigo + " no corresponde a ningun producto");
            }

        } while (codigo.compareTo("0") != 0);

        promocion = new Promocion(nombreProm, fechaInicio, fechaFin, descuento, lproductos);
        promocion.alta();
    }

    public static void opBajaPromocion() throws IOException, ParseException {
        //variables para recuperar los datos del producto
        String codigo;

        Promocion promocion = null;
        System.out.println("");
        System.out.println("================================================");
        System.out.println("|          BAJA DE UNA PROMOCION                |");
        System.out.println("================================================");
        System.out.print("    Introduce c�digo de la promocion: ");
        codigo = Teclado.leeTexto();

        try {
            promocion = Promocion.damePromocion(codigo);
        } catch (IOException ex) {
            //Logger.getLogger(PruebaJesus.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Error!! Al realizar la busqueda de la promocion.");
            System.out.println(ex);
        }

        if (promocion != null) {
            promocion.setBaja(true);

            System.out.println("La promocion con codigo " + promocion.getCodigoPromocion() + " ha sido dado de baja.");
        } else {
            System.out.println("El cliente con codigo " + promocion.getCodigoPromocion() + " no existe en la base de datos.");
        }
    }

    public static void opModificacion() throws ParseException {
        int opc;
        String codigoProm;
        Promocion promocion = null;

        System.out.println("");
        System.out.println("================================================");
        System.out.println("|           MODIFICACION DE UNA PROMOCION      |");
        System.out.println("================================================");
        System.out.print("    Introduzca codigo de la promocion: ");
        codigoProm = Teclado.leeTexto();

        try {
            promocion = Promocion.damePromocion(codigoProm);
        } catch (IOException ex) {

            System.out.println("Error!! Al realizar la busqueda de la promocion!!");
            System.out.println(ex);
        }

        if (promocion != null) {
            do {
                System.out.println("");
                System.out.println("================================================");
                System.out.println("|             VALORES DE PROMOCION             |");
                System.out.println("================================================");
                System.out.println("|-------  [0] Guardar     ---------------------|");
                System.out.println("|-------  [1] Nombre      ---------------------|");
                System.out.println("|-------  [2] Fecha Inicio---------------------|");
                System.out.println("|-------  [3] Fecha Fin   ---------------------|");
                System.out.println("|-------  [4] Descuento   ---------------------|");
                System.out.println("|-------  [5] Activar     ---------------------|");
                System.out.println("|-------  [6] Desactivar  ---------------------|");
                System.out.println("================================================");
                System.out.print("    Introduzca opcion: ");

                // PONER DAR DE ALTA UNA PROMOCION EXISTENTE...........

                try {
                    opc = Teclado.leeEntero();
                } catch (Exception e) {
                    opc = 9999;
                }

                switch (opc) {
                    case 0:
                        break;
                    case 1:
                        System.out.println("El nombre actual es: " + promocion.getNombre());
                        System.out.print("Introduzca el nuevo nombre: ");
                        promocion.setNombre(Teclado.leeTexto());
                        System.out.println("El nombre actual de la promocion es: " + promocion.getNombre());
                        break;
                    case 2:
                        System.out.println("Fecha inicio actual es: " + promocion.getFechaIncio());
                        System.out.print("Introduzca la nueva fecha de inicio: ");
                        promocion.setFechaInicio(Teclado.LeeFecha());
                        System.out.println("La nueva fecha es: " + promocion.getFechaIncio());
                        break;
                    case 3:
                        System.out.println("Fecha de fin actual es: " + promocion.getFechaFin());
                        System.out.print("Introduzca la nueva fecha de fin ");
                        promocion.setFechaFin(Teclado.LeeFecha());
                        System.out.println("La fecha de fin ha cambiado a: " + promocion.getFechaFin());
                        break;
                    case 4:
                        System.out.println("El descuento aplicado es: " + promocion.getDescuento());
                        System.out.print("Introduzca el nuevo descuento: ");
                        promocion.setDescuento(Teclado.leeEntero());
                        System.out.println("El nuevo descuento a aplicar es: " + promocion.getDescuento());
                        break;
                    case 5:
                        promocion.setBaja(true);
                        break;
                    case 6:
                        promocion.setBaja(false);
                        break;
                    default:
                        System.out.println("Opcion incorrecta ...");
                }
            } while (opc != 0);
            promocion.modificacion();
        } else {
            System.out.println("El codigo de la promocion " + codigoProm.toUpperCase() + " no existe...");
        }
    }


    /*
     * En damePromocion a traves de un codigo me muestra una promocion
     *
     */
    /*
     * Aqui voy a mostrar todas promociones
     */
    public static void mostrarPromocion() throws IOException, ParseException {
        String codigo;
        Promocion promocion = null;
        System.out.println("================================================");
        System.out.println("|           MOSTRANDO UNA PROMOCION             |");
        System.out.println("================================================");
        System.out.print("    Introduce codigo de la promocion: ");
        codigo = Teclado.leeTexto();

        promocion = Promocion.damePromocion(codigo);

        if (promocion != null) {
            System.out.println(promocion);

        } else {
            System.out.println("La promocion con codigo" + codigo.toUpperCase() + "no existe en la base de datos.");
        }
    }
     /**
     * Vamos a crear un nuevo usuario
     * @throws AbortarException
     * @throws 
     */
    public static void registrarUsuario()throws IOException, ParseException {
        /*
         * Para crear un nuevo Usuario, solicitamos su nickUsuario,
         * y comprobamos que no existe.
         *
         * Mientras exista, se deberá introducir un nickUsuario.
         * Podemos salir del bucle pulsando la tecla de la constante CANCELAR
         */
        String nickUsuario;
        int indice = 0;
        do {
            nickUsuario = Teclado.leeTexto();
            if (nickUsuario.equals("")) {
                throw new IllegalArgumentException("Error");
            }
            indice = PersistenciaUsuario.existeUsuario(nickUsuario);
            if (indice > -1) {
                if(PersistenciaSujeto.esBajaCliente(indice)) {
                    System.out.println(CLIENTE_DARALTA);
                    String darAlta = EntradaPorTeclado.leeCadena("¿Desea volver a darlo de alta? S/N");
                    if(darAlta.equalsIgnoreCase("S")) {
                        PersistenciaSujeto.darAltaCliente(indice);
                        throw new ReactivarClienteException("Cliente '"+idCliente+"' reactivado");
                    }
                } else {
                    System.out.println(YA_EXISTE);    
                }
            }
        } while (indice > 0);
        /*
         * Una vez fuera del bucle, comprobamos que realmente hay que crear
         * el objeto. Si fuera el caso, solicitamos todos los valores necesarios
         * para crearlo y finalmente lo 'registramos'
         */
        String nombre = EntradaPorTeclado.leeCadena(C_NOMBRE);
        String contacto = EntradaPorTeclado.leeCadena(C_CONTACTO);
        String telefono = EntradaPorTeclado.leeCadena(C_TELEFONO);
        Date fechaAlta = new Date();
        //El id en este momento no nos importa
        Cliente c = new Cliente("", telefono, contacto, nombre, new Tarjeta(idCliente), idCliente, fechaAlta);
        c.registrar();
    }
    }
}
